package top.bug.blog.annotation;

import top.bug.blog.enums.RateLimitEnum;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author <a href="https://github.com/jiusi66">九思.</a>
 * @email 10837907@qq.com
 * @from <a href="https://www.52bug.top">递归茶馆-www.52bug.top</a>
 * @description 接口限流注解
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface RateLimit {
    /**
     * 限流策略枚举（二选一）
     */
    RateLimitEnum strategyEnum() default RateLimitEnum.UNSPECIFIED_LIMIT;

    /**
     * 限流键前缀
     */
    String key() default "";

    /**
     * 时间窗口内最大请求数
     */
    int maxAttempts() default 8;

    /**
     * 时间窗口（秒）
     */
    int timeWindow() default 60;

    /**
     * 超限后屏蔽时间（秒）----默认180秒起始,阶梯惩罚机制
     */
    int blockDuration() default 180;
}